The following example demonstrates how to select all the data items contained in a group by adding them to a grid's selected-items collection when a group-header control is pressed. In the case where a group contains child groups, all the data items in the child groups will also be selected.
XAML |
Copy Code |
---|---|
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid"> <Grid.Resources> <xcdg:DataGridCollectionViewSource x:Key="cvs_orders" Source="{Binding Source={x:Static Application.Current}, Path=Orders}"> <xcdg:DataGridCollectionViewSource.GroupDescriptions> <xcdg:DataGridGroupDescription PropertyName="ShipCountry"/> <xcdg:DataGridGroupDescription PropertyName="ShipCity"/> </xcdg:DataGridCollectionViewSource.GroupDescriptions> </xcdg:DataGridCollectionViewSource> <Style TargetType="{x:Type xcdg:GroupHeaderControl}"> <EventSetter Event="PreviewMouseLeftButtonDown" Handler="SelectRows"/> </Style> </Grid.Resources> <xcdg:DataGridControl x:Name="OrdersGrid" ItemsSource="{Binding Source={StaticResource cvs_orders}}"/> </Grid> |
VB.NET |
Copy Code |
---|---|
Private Sub SelectRows( ByVal sender As Object, ByVal e As MouseButtonEventArgs ) Dim groupHeaderControl As GroupHeaderControl = TryCast( sender, GroupHeaderControl ); If groupHeaderControl Is Nothing Then Return; End If Dim context As DataGridContext = DataGridControl.GetDataGridContext( groupHeaderControl ) Dim header As GroupHeaderFooterItem = TryCast( context.GetItemFromContainer( grouHeaderControl, GroupHeaderFooterItem ) If Not header.Equals( GroupHeaderFooterItem.Empty ) Then Dim group As CollectionViewGroup = context.GetParentGroupFromItem( header ) If Not group Is Nothing Then For Each item As Object In group.Items If TypeOf item Is CollectionViewGroup Then Me.SelectRecurse( context, CType( item, CollectionViewGroup ) ) Else context.SelectedItems.Add( item ) End If Next item End If End If End Sub Private Sub SelectRecurse( ByVal context As DataGridContext, ByVal group As CollectionViewGroup ) For Each item As Object In group.Items If TypeOf item Is CollectionViewGroup Then Me.SelectRecurse( context, CType( item, CollectionViewGroup ) ) Else context.SelectedItems.Add( item ) End If Next item End Sub |
C# |
Copy Code |
---|---|
private void SelectRows( object sender, MouseEventArgs e ) { GroupHeaderControl groupHeaderControl = sender as GroupHeaderControl; if( groupHeaderControl == null ) return; DataGridContext context = DataGridControl.GetDataGridContext( groupHeaderControl ); GroupHeaderFooterItem header = ( GroupHeaderFooterItem )context.GetItemFromContainer( groupHeaderControl ); if( !header.Equals( GroupHeaderFooterItem.Empty ) ) { CollectionViewGroup group = context.GetParentGroupFromItem( header ); if( group != null ) { foreach( object item in group.Items ) { if( item is CollectionViewGroup ) { this.SelectRecurse( context, ( CollectionViewGroup )item ); } else { context.SelectedItems.Add( item ); } } } } } private void SelectRecurse( DataGridContext context, CollectionViewGroup group ) { foreach( object item in group.Items ) { if( item is CollectionViewGroup ) { this.SelectRecurse( context, ( CollectionViewGroup )item ); } else { context.SelectedItems.Add( item ); } } } |